/*
* @(#)JavaDrawApp.java 5.1
*
*/
package CH.ifa.draw.samples.javadraw;
import java.awt.Dimension;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import CH.ifa.draw.application.DrawApplication;
import CH.ifa.draw.contrib.PolygonTool;
import CH.ifa.draw.figures.BorderTool;
import CH.ifa.draw.figures.ConnectedTextTool;
import CH.ifa.draw.figures.ElbowConnection;
import CH.ifa.draw.figures.EllipseFigure;
import CH.ifa.draw.figures.InsertImageCommand;
import CH.ifa.draw.figures.LineConnection;
import CH.ifa.draw.figures.LineFigure;
import CH.ifa.draw.figures.RectangleFigure;
import CH.ifa.draw.figures.RoundRectangleFigure;
import CH.ifa.draw.figures.ScribbleTool;
import CH.ifa.draw.figures.TextFigure;
import CH.ifa.draw.figures.TextTool;
import CH.ifa.draw.framework.Drawing;
import CH.ifa.draw.framework.Tool;
import CH.ifa.draw.standard.ConnectionTool;
import CH.ifa.draw.standard.CreationTool;
import CH.ifa.draw.util.Animatable;
import CH.ifa.draw.util.CommandMenu;
public class JavaDrawApp extends DrawApplication {
private Animator fAnimator;
private static String fgSampleImagesPath = "CH/ifa/draw/samples/javadraw/sampleimages/";
private static String fgSampleImagesResourcePath = "/"+fgSampleImagesPath;
public JavaDrawApp() {
this("JHotDraw");
}
public JavaDrawApp(String name) {
super(name);
}
public void open() {
super.open();
}
//-- application life cycle --------------------------------------------
public void destroy() {
super.destroy();
endAnimation();
}
//-- DrawApplication overrides -----------------------------------------
protected void createTools(Panel palette) {
super.createTools(palette);
Tool tool = new TextTool(view(), new TextFigure());
palette.add(createToolButton(IMAGES+"TEXT", "Text Tool", tool));
tool = new ConnectedTextTool(view(), new TextFigure());
palette.add(createToolButton(IMAGES+"ATEXT", "Connected Text Tool", tool));
tool = new URLTool(view());
palette.add(createToolButton(IMAGES+"URL", "URL Tool", tool));
tool = new CreationTool(view(), new RectangleFigure());
palette.add(createToolButton(IMAGES+"RECT", "Rectangle Tool", tool));
tool = new CreationTool(view(), new RoundRectangleFigure());
palette.add(createToolButton(IMAGES+"RRECT", "Round Rectangle Tool", tool));
tool = new CreationTool(view(), new EllipseFigure());
palette.add(createToolButton(IMAGES+"ELLIPSE", "Ellipse Tool", tool));
tool = new CreationTool(view(), new LineFigure());
palette.add(createToolButton(IMAGES+"LINE", "Line Tool", tool));
tool = new ConnectionTool(view(), new LineConnection());
palette.add(createToolButton(IMAGES+"CONN", "Connection Tool", tool));
tool = new ConnectionTool(view(), new ElbowConnection());
palette.add(createToolButton(IMAGES+"OCONN", "Elbow Connection Tool", tool));
tool = new ScribbleTool(view());
palette.add(createToolButton(IMAGES+"SCRIBBL", "Scribble Tool", tool));
tool = new PolygonTool(view());
palette.add(createToolButton(IMAGES+"POLYGON", "Polygon Tool", tool));
tool = new BorderTool(view());
palette.add(createToolButton(IMAGES+"BORDDEC", "Border Tool", tool));
}
protected Tool createSelectionTool() {
return new MySelectionTool(view());
}
protected void createMenus(MenuBar mb) {
super.createMenus(mb);
mb.add(createAnimationMenu());
mb.add(createImagesMenu());
mb.add(createWindowMenu());
}
protected Menu createAnimationMenu() {
Menu menu = new Menu("Animation");
MenuItem mi = new MenuItem("Start Animation");
mi.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
startAnimation();
}
}
);
menu.add(mi);
mi = new MenuItem("Stop Animation");
mi.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
endAnimation();
}
}
);
menu.add(mi);
return menu;
}
protected Menu createWindowMenu() {
Menu menu = new Menu("Window");
MenuItem mi = new MenuItem("New Window");
mi.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
openView();
}
}
);
menu.add(mi);
return menu;
}
protected Menu createImagesMenu() {
CommandMenu menu = new CommandMenu("Images");
File imagesDirectory = new File(fgSampleImagesPath);
try {
String[] list = imagesDirectory.list();
for (int i = 0; i < list.length; i++) {
String name = list[i];
String path = fgSampleImagesResourcePath+name;
menu.add(new InsertImageCommand(name, path, view()));
}
} catch (Exception e) {}
return menu;
}
protected Drawing createDrawing() {
return new BouncingDrawing();
//return new StandardDrawing();
}
protected Dimension defaultSize() {
return new Dimension(430,436);
}
//---- animation support --------------------------------------------
public void startAnimation() {
if (drawing() instanceof Animatable && fAnimator == null) {
fAnimator = new Animator((Animatable)drawing(), view());
fAnimator.start();
}
}
public void endAnimation() {
if (fAnimator != null) {
fAnimator.end();
fAnimator = null;
}
}
public void openView() {
JavaDrawApp window = new JavaDrawApp();
window.open();
window.setDrawing(drawing());
window.setTitle("JHotDraw (View)");
}
//-- main -----------------------------------------------------------
public static void main(String[] args) {
JavaDrawApp window = new JavaDrawApp();
window.open();
}
}